package com.agritech.observer;

import com.agritech.factory.AgriculturalMachine;
import com.agritech.strategy.HumidityBasedStrategy;
import com.agritech.strategy.ObstacleAvoidanceStrategy;
import com.agritech.strategy.PathPlanner;
import com.agritech.strategy.DefaultPathStrategy;

public class MachineObserver implements Observer {
    private String name;
    private AgriculturalMachine machine; // 关联一个农机实例
    private PathPlanner pathPlanner; // 每个农机观察者有自己的路径规划器

    public MachineObserver(String name, AgriculturalMachine machine) {
        this.name = name;
        this.machine = machine;
        // 默认使用默认路径策略
        this.pathPlanner = new PathPlanner(new DefaultPathStrategy());
        System.out.println("农机观察者 " + name + " 已创建，关联农机类型: " + machine.getType());
    }

    @Override
    public void update(String message) {
        System.out.println("农机 " + name + " (类型: " + machine.getType() + ") 收到环境更新: " + message);
        // 根据环境信息调整策略
        if (message.contains("湿度过高")) {
            System.out.println("农机 " + name + " 检测到湿度过高，切换到湿度优化策略.");
            pathPlanner.setStrategy(new HumidityBasedStrategy());
            pathPlanner.executePlanning(message);
            // 模拟通知拖拉机改变路径 (实际应用中可能通过命令模式)
            System.out.println("通知无人驾驶拖拉机改变行进路径避开 " + name + " 作业区域的高湿度地块。");
        } else if (message.contains("障碍物")) {
            System.out.println("农机 " + name + " 检测到障碍物，切换到避障策略.");
            pathPlanner.setStrategy(new ObstacleAvoidanceStrategy());
            pathPlanner.executePlanning(message);
        } else {
            // 其他情况或默认情况
            System.out.println("农机 " + name + " 使用默认策略处理环境信息: " + message);
            pathPlanner.setStrategy(new DefaultPathStrategy());
            pathPlanner.executePlanning(message);
        }
        // 模拟农机根据策略调整作业 (实际应用中会更复杂)
        System.out.println("农机 " + name + " 根据新策略调整作业参数。");
    }

    public String getName() {
        return name;
    }
}